home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Camelot / Camelot 078 (1990-06)(Swedish User Group of Amiga)(SE)(PD)[WB].zip / Camelot 078 (1990-06)(Swedish User Group of Amiga)(SE)(PD)[WB].adf / TrackSalve / TrackSalve / Manual < prev    next >
Text File  |  1990-06-17  |  12KB  |  233 lines

  1.  
  2.                              TRACKSALVE
  3.  
  4.     TrackSalve is made to improve the Trackdisk device.  TD has some
  5.     problems and lacks some options.  As far as I know there are three bugs,
  6.     from which one is very bad if more than one drive is connected.
  7.     SetPatch 1.3.2 tries to do something about it, but it is not enough.
  8.     There are people who do not like the sound of an empty drive.  Trackdisk
  9.     cannot handle a track with an error on it.  Then all data on that track
  10.     is lost.  We never know whether the just written data is well stored on
  11.     disk.  Some programs do not switch off the motor.  And yet we are poking
  12.     in Trackdisk, we can just as well make a drive optional readonly.
  13.  
  14.  
  15.                              FUNCTIONS
  16.  
  17.     As already stated, TrackSalve can perform six functions:
  18.  
  19.  1. Standard modification of Trackdisk existing of:  Bugs patched.  The
  20.     patch of the bugs (as far as I know them).  See for a list of patched
  21.     bugs near the end of this file.  Among others there was a bug the NoDisk
  22.     routine (oef!).  Now it is save to do I/O on one drive and let all your
  23.     other drives empty.  Write to protected disk returns an error, and
  24.     leaves the unit undisturbed.  Prewrite mfm update.  Before a track is
  25.     written back to disk, all timing bits are validated again.  This is to
  26.     prevent the declining of never updated sectors on much used tracks.  New
  27.     coding routines.  Now it is possible to use fast memory to do I/O.  This
  28.     has no obvious function now, but imagine the effects when adopted by
  29.     Commodore and the Filesystem with AddBuffers.
  30.  
  31.  2. Noclick.  Can be switched on and off for each drive apart.  I think the
  32.     situation is as follows:  Some drives have an electrical switch at the
  33.     home position to prevent stepping below zero.  Other types have a
  34.     mechanical stop.  These you cannot get completely silent.  I think it
  35.     is save to use noclick on the first.  For those with a mechanical stop
  36.     I would not switch noclick on.
  37.  
  38.  3. Readonly simulation.  Each drive can act as if the tab of the inserted
  39.     disk is open.  This is not as simple as it sounds.  The FileSystem
  40.     (DOS) keeps track of disk swapping.  And it asumes that you are not
  41.     able to shift the tab while a disk is in the drive.  Therefore IF there
  42.     is a disk in the drive AND its tab is closed (write-enabled), and the
  43.     drive is swithed over to read-only or read/write, a DiskChange is sent
  44.     out.  This is very unfriendly during a write, so this is delayed until
  45.     the motor is switched off.  Nevertheless, switch a drive from r/w to ro
  46.     or back only when it is quiet.
  47.  
  48.  4. TrackSalvage.  If Trackdisk gives up on a track, this function (if
  49.     enabled) comes to action.  The track is read again and analised.  All
  50.     unsuspicious data is recovered and stored in Trackdisk's buffers.  If
  51.     the requested data is recovered, no error is passed to the calling
  52.     task.  But an attempt to write to this track is denied and results into
  53.     a diskerror.  So faulting tracks are readonly.
  54.  
  55.  5. Verify.  TrackSalve can read back a just written track to check whether
  56.     the data well arrived on disk.  It reads the track into a special
  57.     buffer which is compared with the original write buffer.  Since the
  58.     Amiga is multitasking, it is not possible to know which task should be
  59.     notified about an error.  Therefore it is the user who must decide
  60.     about this.  He can choose between rewrite and ignore.  Rewrite writes
  61.     the original buffer again to disk, and ignore as if we never knew about
  62.     the bad track.  It may be that subsequent rewrites does not lead to a
  63.     good result.  At least the fact is known that something is wrong.  It
  64.     is possible to read-retry by repeating the command:  v read only once,
  65.     vv twice and vvv triple, subsequent v's are ignored.  Multiple reads
  66.     for verify may be useful for usage with very bad drives.
  67.  
  68.  6. Auto update.  The write to disk is delayed until the trackbuffer is
  69.     needed for another track or until an update command is received.  The
  70.     motor also keeps running until a motor off command is received.
  71.     TrackSalve can both do by itself if this function is enabled.  It is
  72.     delayed for about five seconds, that is, the track is updated five
  73.     seconds after the last write command.  The motor is switched off five
  74.     seconds after the last disk access.  Especially Sectorama (which was
  75.     intended for harddisks) will be helped with this function.  But there
  76.     are more. (Diskcopy:  try to diskcopy to a write protected disk).
  77.  
  78.  
  79.                                 COMMANDLINE
  80.  
  81.     If anywhere on the command line one of the chars h, H, or ? are found,
  82.     the whole command line is ignored and nothing is done but a small usage
  83.     explanation is printed:
  84.  
  85.     Syntax: TrackSalve  {[!]<unit>|a {<unit>} {<Command>}}
  86.     Function: Modify a Trackdisk device unit addressed by its unit number
  87.      <no args>         Show present status
  88.     Units:
  89.      0-3   Unit(s)     Succeeding commands are applied to listed units
  90.       a    All         Succeeding commands are applied to all TD units
  91.       !    Warning     Suppress error if the following unit does not exist
  92.     Commands:
  93.     <none> TD in RAM   No special functions (.=default), improved reliability
  94.       o    Original    Let TD execute in its original ROM code
  95.       s    SectorDisk  Let Trackdisk only give errors from bad sectors
  96.       t   .TrackDisk   Normal: Let TD give errors from bad tracks
  97.       n    NoClick     Perform noclick on the unit(s)
  98.       c   .Click       Normal: No noclick
  99.       r    ReadOnly    Make unit read-only, simulate open disk-tab
  100.       w   .WriteEnable Normal: Unit is read/write according to disk-tab
  101.       v    Verify      Read written track back and compare (vv, vvv)
  102.       b   .Believe     Normal: Asume track is written well
  103.       u    Update      Flush track and stop motor after 5 sec idling
  104.       e   .ExtUpdate   Normal: External update and motor off
  105.       /    Separator   E.g. "0/2n"  Units 0 and 2 in RAM, noclick only on 2
  106.      h ?   Explain     If given (anywhere), no commands are executed
  107.  
  108.     Comma's, spaces and dashes are completly ignored.  Characters which are
  109.     not defined lead to an abortion of the program without executing any
  110.     function.  This will be emphasised by a message via standard out.
  111.     Abortion always has a return value of 20.
  112.  
  113.     Units
  114.  
  115.     You must address an unit by its number instead of its DOS-name.  This
  116.     is because we are modifying an Exec-device and not a DOS-device.  This
  117.     device has nothing to do with DOS.  DOS uses it, and builds a system
  118.     around it.  The name of this system is for example "DF0:". Valid
  119.     numbers are 0, 1, 2, 3, a and A or any combination of them. 'A' means
  120.     all units.  Commands are single characters.  Before you give a command
  121.     you must specify one or more units to apply the command to.  A command
  122.     will be passed to all directly preceding listed units.  If a unit is
  123.     given that does not exist, then this is an error and nothing will be
  124.     done at all.  It can come handy if it is possible to give a unit that
  125.     does not exist.  Normal would be aborted with return code 20.  But if
  126.     a '!' is put before a possible non-existing unit, a message is printed
  127.     and the program continues normally, but returns 5.
  128.  
  129.     Commands
  130.  
  131.     Just a list of units and no commands results in the execution of
  132.     Trackdisk in RAM with repaired bugs. "TrackSalve a" or "TrackSalve
  133.     023". Commands are applied only to preceding units.  F.e. TrackSalve
  134.     01n lets units 0 and 1 stop clicking.  Now you can add new unit numbers
  135.     like:  TrackSalve 01n2r1s.  This results into noclick on units 0 and 1,
  136.     unit is 2 readonly and unit can salve tracks.  It is also possible to
  137.     give contradictory commands:  TrackSalve an1c lets all units except 1
  138.     noclicking.  The separator '/' is a donoting command or "unit list
  139.     reset". TrackSalve 012/2n lets the units 0, 1 and 2 execute in ram, but
  140.     noclick is only performed by unit 2. Reset to a defined state can be
  141.     done by TrackSalve ao followed by the new state.  TrackSalve without
  142.     any parameters prints the present situation and changes nothing.
  143.  
  144.  
  145.                               HOW TO USE IT
  146.  
  147.     Although Disksalv works well without, both programs work very well
  148.     together.  Disksalv with TrackSalve will generally operate faster and
  149.     more clearly.  It also is possible (not yet happened) that the
  150.     combination can salve more data.  Sometimes only one file is the effort
  151.     of salvage worthy, like the latest modification not yet on a backup.
  152.     Now there is a chance that the file can be saved with copy.  Might save
  153.     some time.  Then it is possible that immediately after disk insertion a
  154.     requester appears with "unreadable" and "diskdoctor" or so.  There is a
  155.     fair chance that with TrackSalve these requesters stay away and the
  156.     disk will be accepted as a DOS disk.  You can do more in that case.
  157.  
  158.  
  159.                              IMPLEMENTATION
  160.  
  161.     The Trackdisk code will be copied from the operating system program and
  162.     modified and extended.  For each unit apart, the unit task can execute
  163.     this code or stay with the original in ROM.  If a unit cannot be brought
  164.     to execute the patched code, this is told in a message on standard out
  165.     and the program will continue normally but its return value will be 10.
  166.     There are two functions which use a buffer of about 26k.  If not
  167.     available at the moment of enabling, every .5 second this is tried to
  168.     allocate again.  Until the allocation is successful, the function
  169.     becomes not active.  This is reported through a message and the return
  170.     value will be 10. Execute TrackSalve without parameters to be sure the
  171.     function became active.  This buffer is shared among all tasks.
  172.     Normally this will work smoothly and without delay except when a
  173.     requester is displayed.  The requester is used when a verify error has
  174.     been detected.  If for some reason it is not possible to pop up a
  175.     requester, TrackSalve will loop rewriting the track and blink the
  176.     drive's led until the conditions have changed.  These are:
  177.  
  178.     1. The disk is removed.
  179.     2. The track is found well on disk.
  180.     3. There is enough memory to display the requester.
  181.  
  182.  
  183.                               PERFORMANCE
  184.  
  185.     The mfm revalidation costs some time.  It is not an exact value, but it
  186.     will stay well under 2 procent.  The encoding routines and track
  187.     maintenance became much faster because these can now ignore the timing
  188.     bits.  Track verify takes a lot of time, but it is done very efficient
  189.     this close to the object.  I measured an average increase of 30 procent.
  190.     To get these results, I did a file level diskcopy of a 70 procent full
  191.     disk to a duplicate.
  192.  
  193.  
  194.                               PATCHED BUGS
  195.  
  196.     Disk presence check routine.  Now a call to disk.resource GetUnit() is
  197.     done before accessing the hardware.
  198.  
  199.     In TD_RAWREAD and TD_RAWWRITE the size if the track was compared with
  200.     some value at location $8000 instead of $8000 itself.
  201.  
  202.     In TD_FORMAT, TD_RAWREAD and TD_RAWWRITE the tracknumber was compared
  203.     wrong sized, permitting a seek to track number zillion.
  204.  
  205.     A write to a protected disk was not rejected immediately.  The
  206.     trackbuffer was permitted to be modified.
  207.  
  208.  
  209.                                 HISTORY
  210.  
  211.     Version 1.0 had a guru 3 type bug, but the faulting code was (almost)
  212.     never executed.  This version could be updated to 1.01 by a patch
  213.     program PatchTS.
  214.     Version 1.2 had multiple reads with verify implemented for users with
  215.     very bad drives.
  216.     Version 1.3 had mfm revalilidation adopted from Pcopy, new coding and
  217.     decoding routines allowing fast buffers and auto update implemented.
  218.     Also a write to a write protected disk is denied.  Verify comparision
  219.     is now done by the blitter.  And a unit is more likely to be caught.
  220.     Version 1.31 removes two more bugs.  Better !<unit> logic.
  221.  
  222.  
  223.                                COPYRIGHT
  224.  
  225.     Copyright (c) 1990 D.W.Reisig.  This program may be distributed on
  226.     non-commercial base.  This program may not be distibuted on commercial
  227.     base without my permission.
  228.  
  229.     D.W.Reisig
  230.     Woudweeren 10
  231.     1151 AV  Broek in Waterland
  232.     Holland
  233.